#ifndef _FINGER_BOARD_H_
#define _FINGER_BOARD_H_

#include <config.h>
#include <stdbool.h>

#if (_SAFETY_MODULE_TYPE_ == _FINGER_SAFETY_MODULE_) && (_SAFETY_VERIFYFUNCTION_ENABLE_)

/**
 * @brief 本地注册前的准备
 *
 * @param WaitDelay - 等待时间
 */
extern void FingerPreparationsBeforeLocalRegister(uint8_t WaitDelay);

/**
 * @brief 开始本地注册
 *
 */
extern void FingerStartLocalRegister(void);

/**
 * @brief 请再次录入指纹
 *
 */
extern void FingerUpdateRegisterPrintfAgain(void);

/**
 * @brief 获取设备激活状态
 *
 * @return bool - 激活状态（true：激活 false: 未激活）
 */
extern bool FingerGetDeviceActivationStatus(void);

/**
 * @brief 获取搜索超时时间
 *
 * @return uint8_t - 搜索超时时间
 */
extern uint8_t FingerGetSearchTimeout(void);

/**
 * @brief 重置本地注册超时定时器
 *
 */
extern void FingerReloadLocalRegisterTimer(void);

/**
 * @brief 读取特征值文件属性
 *
 * @param pFileSizeOut - 特征值文件长度
 */
extern void FingerReadEigenvalueFileInformation(uint32_t *pFileSizeOut);

/**
 * @brief 写入特征值文件属性
 *
 * @param FileSize - 特征值文件长度
 * @return bool    - 获取状态（true：成功 false：失败）
 */
extern bool FingerWriteEigenvalueFileInformation(uint32_t FileSize);

/**
 * @brief 从内存中读取特征值文件
 *
 * @param ReadOffset - 读取偏移地址
 * @param pDataOut   - 目标偏移特征值文件
 * @param DateSize   - 获取文件大小
 */
extern void FingerReadFeatureValueFilesForMemory(uint32_t ReadOffset, uint8_t *pDataOut, uint16_t DateSize);

/**
 * @brief 将特征值文件写入到内存中
 *
 * @param WriteOffset - 写入偏移地址
 * @param pDataIn     - 待写入的特征值文件数据
 * @param DateSize    - 写入文件大小
 * @return bool       - 写入状态（true：成功 false：失败）
 */
extern bool FingerWriteFeatureValueFilesToMemory(uint32_t WriteOffset, uint8_t *pDataIn, uint16_t DateSize);

/**
 * @brief 删除重复的用户
 * 
 * @param UserId - 重复的用户
 * @return bool  - 删除状态（true：成功 false：失败）
 */
extern bool FingerDeleteDuplicateUsers(uint16_t UserId);

#endif
#endif
